package p.sglmsn.top.ext.wx.enums;

import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSONArray;
import p.sglmsn.top.ext.wx.entity.ComeBack;
import p.sglmsn.top.ext.wx.iface.MethodInterface;
import p.sglmsn.top.ext.wx.service.WeChatService;
import p.sglmsn.top.ext.wx.wxext.http.HttpUtil;
import p.sglmsn.top.ext.wx.wxext.http.SendDto;

import java.util.LinkedList;

public enum MethodEnum {

    获取mac(sendDto -> HttpUtil.send(sendDto.setMethod("mac"))),
    启动新微信(sendDto -> HttpUtil.send(sendDto.setMethod("run").setPath(HttpUtil.path).setPid(-1))),
    切换二维码(sendDto -> HttpUtil.send(sendDto.setMethod("gotoQr"))),
    得到登录信息(sendDto -> HttpUtil.send(sendDto.setMethod("getInfo"))),

    获取授权(sendDto -> {
        String str = StrUtil.format("wxid={}&data={}", sendDto.getMyid(), HttpUtil.mac);
        String s = cn.hutool.http.HttpUtil.get("https://api.wxext.cn/auth?" + str);
        String token = new JSONObject(s).getStr("token");

        return HttpUtil.send(sendDto.setMethod("auth").setToken(token));
    }),
    授权(sendDto -> {
        return HttpUtil.send(sendDto.setMethod("auth").setToken(StrUtil.format("wxid={}&data={}", sendDto.getWxid(), HttpUtil.mac)));
    }),
    列表(sendDto -> HttpUtil.send(sendDto.setMethod("list"))),
    收款(sendDto -> HttpUtil.send(sendDto.setMethod("agreeCash"))),
    点击登录(sendDto -> HttpUtil.send(sendDto.setMethod("clickLogin"))),
    获取通讯录(sendDto -> HttpUtil.send(sendDto.setMethod("getUser"))),
    查询用户信息(sendDto -> HttpUtil.send(sendDto.setMethod("getUserInfo"))),

    发送信息(sendDto -> HttpUtil.send(sendDto.setMethod("sendText"))),


    发送图片(sendDto -> HttpUtil.send(sendDto.setMethod("sendImage").setImgType("file"))),
    接受好友请求(sendDto -> HttpUtil.send(sendDto.setMethod("agreeUser").setScene(14))),

    获取登录信息(sendDto -> {
        ComeBack exec = MethodEnum.列表.exec(new SendDto());
        Object data = exec.getData();
        Dict dict = new Dict();
        if (data instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) data;
            if (jsonArray.size() > 0) {
                for (Object o : jsonArray) {
                    try {
                        com.alibaba.fastjson.JSONObject object = (com.alibaba.fastjson.JSONObject) o;
                        Integer pid = object.getInteger("pid");
                        String wxid = object.getString("wxid");
                        dict.set(wxid, pid);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        WeChatService.DICT = dict;
        WeChatService.LOGIN_ACCOUNT = dict.keySet();
        return null;

    }),

    添加授权(sendDto -> {
        LinkedList<Integer> f = new LinkedList<>();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 1; i < 10010; i++) {
            stringBuilder.append("&type[]=").append(i);
        }
        stringBuilder.append("&method=notify&name=基础推送&action=add&url=").append(HttpUtil.setting
                .getStr("url", "http://localhost/receiveInformation"));

        String post1 = cn.hutool.http.HttpUtil.post(HttpUtil.getUrl(), stringBuilder.toString(), 6000);
        System.out.println(post1);
        return null;
    }),
    检查是否需要授权(sendDto -> {
        {
            ComeBack notify = HttpUtil.send(sendDto.setMethod("notify"));
            if (notify.getData() instanceof JSONArray) {
                JSONArray jsonArray = (JSONArray) notify.getData();
                if (jsonArray.size() < 1) {
                    添加授权.exec(sendDto);
                }
            } else {
                添加授权.exec(sendDto);
            }
        }
        return null;
    });


    private final MethodInterface anInterface;

    MethodEnum(MethodInterface anInterface) {
        this.anInterface = anInterface;
    }

    public MethodInterface getAnInterface() {
        return anInterface;
    }

    public ComeBack exec(SendDto dto) {
        return getAnInterface().exec(dto);
    }
}
